home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / mc / extfs / a next >
Text File  |  2009-10-25  |  3KB  |  125 lines

  1. #! /usr/bin/perl -w
  2. #
  3. # External filesystem for mc, using mtools
  4. # Written Ludek Brukner <lubr@barco.cz>, 1997
  5. # Much improved by Tom Perkins <968794022@noid.net>, 2000
  6. #
  7. # WARNING - This software is ALPHA - Absolutely NO WARRANTY
  8.  
  9. # These mtools components must be in PATH for this to work
  10.  
  11. sub quote {
  12.     $_ = shift(@_);
  13.     s/([^\w\/.+-])/\\$1/g;
  14.     return($_);
  15. }
  16.  
  17. $mmd = "mmd";
  18. $mrd = "mrd";
  19. $mdel = "mdel";
  20. $mdir = "mdir -a";
  21. $mcopy = "mcopy -noQ";
  22.  
  23. $0 =~ s|.*/||;
  24. $qdisk = quote($0);
  25.  
  26. $ENV{MTOOLS_DATE_STRING} = "mm-dd-yyyy";
  27. $ENV{MTOOLS_TWENTY_FOUR_HOUR_CLOCK} = "1";
  28.  
  29. SWITCH: for ( $ARGV[0] ) {
  30.   /list/ && do {
  31.     @dirs = get_dirs("");
  32.     while ($dir = shift(@dirs)) {
  33.       push @dirs, get_dirs("$dir/");
  34.     } exit 0; };
  35.   /mkdir/ && do {
  36.     shift; shift;
  37.     exit 1 if scalar(@ARGV) != 1;
  38.     $qname = quote($ARGV[0]);
  39.     system("$mmd $qdisk:/$qname >/dev/null");
  40.     exit 0; };
  41.   /rmdir/ && do {
  42.     shift; shift;
  43.     exit 1 if scalar(@ARGV) != 1;
  44.     $qname = quote($ARGV[0]);
  45.     system("$mrd $qdisk:/$qname >/dev/null");
  46.     exit 0; };
  47.   /rm/ && do {
  48.     shift; shift;
  49.     exit 1 if scalar(@ARGV) != 1;
  50.     $qname = quote($ARGV[0]);
  51.     system("$mdel $qdisk:/$qname >/dev/null");
  52.     exit 0; };
  53.   /copyout/ && do {
  54.     shift; shift;
  55.     exit 1 if scalar(@ARGV) != 2;
  56.     ( $qsrc, $qdest ) = @ARGV;
  57.     $qsrc = quote($qsrc);
  58.     $qdest = quote($qdest);
  59.     system("$mcopy $qdisk:/$qsrc $qdest >/dev/null");
  60.     exit 0; };
  61.   /copyin/ && do {
  62.     shift; shift;
  63.     exit 1 if scalar(@ARGV) != 2;
  64.     ( $qdest, $qsrc ) = @ARGV;
  65.     $qsrc = quote($qsrc);
  66.     $qdest = quote($qdest);
  67.     system("$mcopy $qsrc $qdisk:/$qdest >/dev/null");
  68.     exit 0; };
  69.   /.*/ && do {                               # an unfamiliar command
  70.     exit 1; };
  71. }
  72.  
  73. sub get_dirs {
  74.   my ($path, $name, $size, $date, $time, $longname, @lst, @rv);
  75.   $path = shift(@_);
  76.   my $qpath = quote($path);
  77.   @rv = ();
  78.  
  79.   open(FILE,"$mdir $qdisk:/$qpath |");
  80.   while ( <FILE> ) {
  81.     chomp();
  82.     /^ / && next;                            # ignore `non-file' lines
  83.     m{^Directory for $0:/}i && next;         # ignore `non-file' lines
  84.     /^$/ && next;                            # ignore empty lines
  85.     /^\.\.?/ && next;                        # ignore `.' and `..'
  86.  
  87.     $name = substr($_,0,12);
  88.     $name =~ s/^([^ ]*) +([^ ]+)[ \t]*$/$1.$2/;
  89.     $name =~ s/[ .]+$//;
  90.  
  91.     $_ = substr($_,12);
  92.     s/^[ ]+//;
  93.  
  94.     ($size,$date,$time,$longname) = split(/[ \t]+/, $_, 4);
  95.  
  96.     defined $time || next;
  97.  
  98.     # process "am" and "pm".  Should not be needed if
  99.     # MTOOLS_TWENTY_FOUR_HOUR_CLOCK is respected.
  100.     @lst = split(/([:ap])/, $time);
  101.     $lst[0] += 12 if (defined $lst[3] && $lst[3] eq "p");
  102.  
  103.     $time = sprintf("%02d:%02d", $lst[0], $lst[2]);
  104.     @lst = split(/-/, $date);
  105.     $lst[2] %= 100 if ($lst[2] > 100);
  106.     $date = sprintf ("%02d-%02d-%02d", @lst);
  107.  
  108.     $name = $path . lc(($longname) ? $longname : $name);
  109.  
  110.     if ($size =~ /DIR/) {
  111.       printf("drwxr-xr-x   1 %-8d %-8d %8d %s %s %s\n",
  112.         0, 0, 0, $date, $time, $name);
  113.       push @rv, $name;
  114.     } else {
  115.       printf("-rw-r--r--   1 %-8d %-8d %8d %s %s %s\n",
  116.         0, 0, $size, $date, $time, $name);
  117.     }
  118.   }
  119.   close(FILE);
  120.   return @rv;
  121. }
  122.  
  123. 1;
  124.